package cl.mt.mvc.action.transportista;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import cl.mt.dto.DTOUsuario;
import cl.mt.dto.DTOVehiculo;
import cl.mt.mvc.action.transportista.helper.TransportistaHelper;
import cl.mt.mvc.helper.UsuarioHelper;
import cl.mt.util.Utiles;

public class Vehiculos extends Action {
	private Logger log = LogManager.getLogger(Vehiculos.class.getName());

	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {

		String accion = request.getParameter("accion");
		log.debug("Accion Vehiculo [" + accion + "]");

		// Buscamos los datos del Usuario Conectado.
		UsuarioHelper userHelper = new UsuarioHelper();
		DTOUsuario userDto = userHelper.getUserConectado(request);
		if (userDto == null) {
			log.error("Usuario No se encuentra Logeado");
			return mapping.findForward("ERROR");
		}

		if (accion == null || "LISTA".equals(accion))
			return listado(mapping, userDto, request);

		if ("ver".equals(accion))
			return view(mapping, userDto, request);
		if ("editar".equals(accion))
			return edit(mapping, userDto, request);
		if ("borrar".equals(accion))
			return view(mapping, userDto, request);
		if ("eliminar".equals(accion))
			return delete(mapping, userDto, request);
		if ("crear".equals(accion))
			return create(mapping, userDto, request);

		return listado(mapping, userDto, request);
	}

	public ActionForward listado(ActionMapping mapping, DTOUsuario userDto, HttpServletRequest request) {

		String forward = "LISTADO";

		// Buscamos el listado de Vehiculos Registrados.

		TransportistaHelper transHelper = new TransportistaHelper();
		List<DTOVehiculo> listaVehiculo = transHelper.getListaVehiculos(userDto.getId());

		// Retornamos.
		request.setAttribute("listaVehiculo", listaVehiculo);
		return mapping.findForward(forward);

	}

	public ActionForward view(ActionMapping mapping, DTOUsuario userDto, HttpServletRequest request) {

		String forward = "VER";

		Integer idVehiculo = Utiles.parseInteger(request.getParameter("idVehiculo"));

		// Buscamos los datos del Vehiculo.

		TransportistaHelper transHelper = new TransportistaHelper();
		DTOVehiculo dtoVehiculo = transHelper.getVehiculo(idVehiculo);

		// Retornamos.
		if ("borrar".equals(request.getParameter("accion")))
			request.setAttribute("hayQueBorrar", "S");
		request.setAttribute("DatoVehiculo", dtoVehiculo);
		return mapping.findForward(forward);

	}

	public ActionForward edit(ActionMapping mapping, DTOUsuario userDto, HttpServletRequest request) {

		String forward = "EDITAR";

		Integer idVehiculo = Utiles.parseInteger(request.getParameter("idVehiculo"));

		// Buscamos los datos del Vehiculo.

		TransportistaHelper transHelper = new TransportistaHelper();
		DTOVehiculo dtoVehiculo = transHelper.getVehiculo(idVehiculo);

		// Retornamos.
		request.setAttribute("DatoVehiculo", dtoVehiculo);
		return mapping.findForward(forward);

	}

	public ActionForward delete(ActionMapping mapping, DTOUsuario userDto, HttpServletRequest request) {

		String forward = "RESULTADO";

		Integer idVehiculo = Utiles.parseInteger(request.getParameter("idVehiculo"));

		// Buscamos los datos del Vehiculo.
		TransportistaHelper transHelper = new TransportistaHelper();
		DTOVehiculo dtoVehiculo = transHelper.getVehiculo(idVehiculo);

		request.setAttribute("MsgRespuesta", "Vehiculo eliminado Correctamente");
		if (dtoVehiculo == null) {
			log.debug("Vehiculo NO existe");
			request.setAttribute("MsgRespuesta", "Vehiculo no Existe");
			return mapping.findForward(forward);
		}

		int res = transHelper.deleteVehiculo(idVehiculo);
		if (res == 0) {
			log.debug("Error. No se pudo eliminar Vehiculo");
			request.setAttribute("MsgRespuesta", "Error. No se pudo Eliminar Vehiculo");
		}

		// Retornamos.
		return mapping.findForward(forward);

	}

	public ActionForward create(ActionMapping mapping, DTOUsuario userDto, HttpServletRequest request) {

		String forward = "RESULTADO";

		DTOVehiculo dtoVehiculo = getDatosVehiculo(request);
		dtoVehiculo.setIdUsuario(userDto.getId());

		// Buscamos los datos del Vehiculo.
		TransportistaHelper transHelper = new TransportistaHelper();

		DTOVehiculo dtoRespuesta = transHelper.createVehiculo(dtoVehiculo);
		if (dtoRespuesta == null) {
			log.debug("Error. No se pudo crear Vehiculo");
			request.setAttribute("MsgRespuesta", "Error. No se pudo Crear Vehiculo");
		}
		// Retornamos.
		request.setAttribute("DatoVehiculo", dtoVehiculo);
		return mapping.findForward(forward);

	}

	private DTOVehiculo getDatosVehiculo(HttpServletRequest request) {

		DTOVehiculo dto = new DTOVehiculo();
		dto.setId( Utiles.parseInteger(request.getParameter("idVehiculo")));
		dto.setPatente(request.getParameter("patente"));
		dto.setAnoFabricacion(Utiles.parseInteger(request.getParameter("anoFabricacion")));
		dto.setIdTipoVehiculo(Utiles.parseInteger(request.getParameter("idTipoVehiculo")));
		dto.setIdTipoPlataforma(Utiles.parseInteger(request.getParameter("idTipoPlataforma")));
		dto.setGps(request.getParameter("gps"));
		dto.setMarca(request.getParameter("marca"));
		dto.setIdTipoUnidad(Utiles.parseInteger(request.getParameter("idUnidadCarga")));
		dto.setCapacidad(Utiles.parseInteger(request.getParameter("capacidad")));

		dto.setObervaciones(request.getParameter("observacion"));

		return dto;
	}

}
